From: Florian Müllner Date: Thu, 5 Mar 2020 17:01:38 +0000 (+0100) Subject: extensionPrefs: Export parent window for prefs dialog X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~751^2^2~51 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=512862f2d7599b43c0f7df9d5a39b64f9536b65f;p=gnome-shell.git extensionPrefs: Export parent window for prefs dialog Now that OpenExtensionPrefs()'s parentWindow parameter is actually supported, export the main application window so it can act as transient parent to the prefs dialog. https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1087 --- diff --git a/js/extensionPrefs/js/main.js b/js/extensionPrefs/js/main.js index c4bb4fa5a..d25df9c57 100644 --- a/js/extensionPrefs/js/main.js +++ b/js/extensionPrefs/js/main.js @@ -4,7 +4,7 @@ imports.gi.versions.Gtk = '3.0'; const Gettext = imports.gettext; const Package = imports.package; -const { Gdk, GLib, Gio, GObject, Gtk } = imports.gi; +const { Gdk, GLib, Gio, GObject, Gtk, Shew } = imports.gi; Package.initFormat(); @@ -15,6 +15,8 @@ const { ExtensionState, ExtensionType } = ExtensionUtils; const GnomeShellIface = loadInterfaceXML('org.gnome.Shell.Extensions'); const GnomeShellProxy = Gio.DBusProxy.makeProxyWrapper(GnomeShellIface); +Gio._promisify(Shew.WindowExporter.prototype, 'export', 'export_finish'); + function loadInterfaceXML(iface) { const uri = 'resource:///org/gnome/Extensions/dbus-interfaces/%s.xml'.format(iface); const f = Gio.File.new_for_uri(uri); @@ -89,6 +91,9 @@ var ExtensionsWindow = GObject.registerClass({ this._updatesCheckId = 0; + this._exporter = new Shew.WindowExporter({ window: this }); + this._exportedHandle = ''; + this._mainBox.set_focus_vadjustment(this._scrolledWindow.vadjustment); let action; @@ -152,9 +157,17 @@ var ExtensionsWindow = GObject.registerClass({ dialog.present(); } - openPrefs(uuid) { + async openPrefs(uuid) { + if (!this._exportedHandle) { + try { + this._exportedHandle = await this._exporter.export(); + } catch (e) { + log('Failed to export window: %s'.format(e.message)); + } + } + this._shellProxy.OpenExtensionPrefsRemote(uuid, - '', + this._exportedHandle, { modal: new GLib.Variant('b', true) }); }